Hello I get an error "NoReverseMatch at "/" It occurs when i change in HTML template to {% url 'cart-page' cart.id %}, when i use user.username everything works but I would like to have a cart.id instead username. It is not fault of urls.py because i have changed int to str , and vice versa.
code:
HTML:
<div class="navbar__rightside">
<a class="navbar__link" href="{% url 'cart-page' cart.id %}">Cart</a>
<a class= "navbar__link" href="{% url 'profile-page' user.username %}">Profile</a>
<a class="navbar__link" href="{% url 'logout-page' %}">Logout</a>
</div>
views.py:
class ShopListView(ListView):
model = Item
template_name = 'shop/home.html'
context_object_name = 'items'
def post(self, request, *args, **kwargs):
return reverse('detail-page')
class CartView(TemplateView):
template_name = "shop/cart.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['cart'] = Cart.objects.annotate(
price=Sum(F('orderitem__item__price') * F('orderitem__quantity'))
).get(order_user= self.request.user)
cart = context['cart']
cart.total = cart.price
cart.save()
context['order_items'] = OrderItem.objects.filter(cart=cart)
return context
def post(self, request, pk):
if 'minus' in request.POST:
cart = Cart.objects.get(order_user=self.request.user)
OrderItem.objects.filter(id=pk, cart=cart).update(
quantity=F('quantity')-1)
return HttpResponse("cart uptaded")
urls.py
path('', ShopListView.as_view(), name='home-page'),
path('cart/<int:pk>/', CartView.as_view(), name='cart-page'),
in your html
<div class="navbar__rightside">
<a class="navbar__link" href="{% url 'cart-page' pk=cart.id %}">Cart</a>
<a class= "navbar__link" href="{% url 'profile-page' user.username %}">Profile</a>
<a class="navbar__link" href="{% url 'logout-page' %}">Logout</a>
</div>
you have to tell what is id you are referring to and tell me if still does not work for you